package com.yidu.service.impl;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.yidu.common.Tools;
import com.yidu.dao.ListenBillOfMaterialMapper;
import com.yidu.dao.ListenFinanceDetailMapper;
import com.yidu.dao.ListenFinanceMapper;
import com.yidu.dao.ListenQualityTestingDetailMapper;
import com.yidu.dao.ListenQualityTestingMapper;
import com.yidu.dao.ListenRawstockRecordMapper;
import com.yidu.dao.ListenRawstockStockMapper;
import com.yidu.dao.ListenStockMapper;
import com.yidu.dao.ListenStockRecordMapper;
import com.yidu.domain.ListenBillOfMaterial;
import com.yidu.domain.ListenFinance;
import com.yidu.domain.ListenFinanceDetail;
import com.yidu.domain.ListenQualityTesting;
import com.yidu.domain.ListenQualityTestingDetail;
import com.yidu.domain.ListenRawstockRecord;
import com.yidu.domain.ListenRawstockStock;
import com.yidu.domain.ListenStock;
import com.yidu.domain.ListenStockRecord;
import com.yidu.service.ListenStockService;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author jiangyu
 * @since 2018-11-27
 */
@Service
public class ListenStockServiceImpl  implements ListenStockService {
	@Resource
	private ListenStockMapper dao;
	
	@Resource
	ListenQualityTestingDetailMapper qtdDao;
	
	@Resource
	ListenStockRecordMapper srDao;

	@Resource
	ListenBillOfMaterialMapper bofDao;
	
	@Resource
	ListenQualityTestingMapper qtDao;
	
	@Resource
	ListenRawstockStockMapper rsDao;
	
	@Resource
	ListenRawstockRecordMapper rrDao;
	/**
	 * 查询所有
	 */
	@Override
	public List<ListenStock> selectfanll(Map<String, Object> map) {
		List<ListenStock> list =dao.selectfanll(map);
		for (ListenStock listenStock : list) {
			String ti =Tools.getTimeStr(listenStock.getOpenTime());
			listenStock.setTime(ti);
		}
		return dao.selectfanll(map);
	}
	/**
	 * 查询总行数
	 */
	@Override
	public int selectC(Map<String, Object> map) {
		return dao.selectC(map);
	}
	/**
	 * 根据ID查询
	 */
	@Override
	public ListenStock selectID(String id) {
		return dao.selectID(id);
	}
	/**
	 * 增加
	 */
	@Override
	public void insertSelective(ListenStock stock) {
		stock.setStockId(Tools.getRandomString());
		dao.insertSelective(stock);
	}
	/**
	 * 修改
	 */
	@Override
	public void updateByPrimaryKeySelective(ListenStock stock) {
		 dao.updateByPrimaryKeySelective(stock);
	}
	
	@Override
	public List<ListenStock> selectgsName(Map<String,Object> map) {
		// TODO Auto-generated method stub
		return dao.selectgsName(map);
	}
	/**
	 * @author zwm
	 * 根据公司名查询行数
	 */
	@Override
	public int selectCount(Map<String, Object> map) {
		
		return dao.selectCount(map);
	}
	/**
	 * 根据乐器id修改库存数量
	 */
	@Override
	public int muIdUpdate(Map<String, Object> map) {
		//根据乐器id修改库存数量
		return dao.muIdUpdate(map);
	}
	@Override
	public List<ListenStock> findById(ListenStock stock) {
		return dao.findById(stock);
	}
	
	/**
     * @title 质检增加乐器库存
     * @param String
     * @return int
     * @author 江宇
     * @dateTime 2018年11月29日
     * @versions 1.0
     */
	@Override
	public int qualityTestingadd(String qtId,String vocationalWorkId) {
		int rows=0;
		//创建质检Map集合
		Map<String, Object> qtdMap=new HashMap<>();
		//质检ID赋值
		qtdMap.put("qtId", qtId);
		//调用查询质检明细的方法
		List<ListenQualityTestingDetail> qtdList=qtdDao.findQualityTestingDetail(qtdMap);
		 
		//循环查询的质检明细List集合
		for (ListenQualityTestingDetail listenQualityTestingDetail : qtdList) {
			//创建乐器库存Map集合
			Map<String, Object> stockMap=new HashMap<>();
			//乐器ID赋值
			stockMap.put("muId", listenQualityTestingDetail.getVocationalWorkId());
			//公司ID赋值
			stockMap.put("companyId", "1");
			//调用根据乐器ID查询库存的方法
			ListenStock st=dao.findByMuId(stockMap);
					//获取质检通过的数量(质检总数量-未通过数量)
					int productionNumber=listenQualityTestingDetail.getQtdNumber()-listenQualityTestingDetail.getQtdNoNumber();
					//得到每个乐器加入库存的数量(乐器库存数量+质检通过数量)
					int joinNumber=st.getStockNumber()+productionNumber;
					 
					//创建乐器库存类对象
					ListenStock sts=new ListenStock();
					//库存ID赋值
					sts.setStockId(st.getStockId());
					//库存数量赋值
					sts.setStockNumber(joinNumber);
					//调用根据乐器库存ID修改乐器库存的方法
					dao.updateByPrimaryKeySelective(sts);
					
					//创建乐器库存记录类对象
					ListenStockRecord sr=new ListenStockRecord();
					//UUID主键
					sr.setSrId(Tools.getRandomString(32));
					//乐器库存ID赋值
					sr.setStockId(st.getStockId());
					//乐器名称赋值
					sr.setMuName(st.getMuName());
					//乐器库存记录时间赋值
					sr.setSrTime(new Date());
					//入库数量赋值
					sr.setSrNumber(productionNumber);
					//乐器库存记录说明
					sr.setSrExplain("入库,生产乐器");
					//是否有效(有效)
					sr.setIsva(1);
					
					//调用增加乐器库存记录的方法
					rows=srDao.insertSelective(sr);
			
			//创建物料清单Map集合
			Map<String, Object> bofMap=new HashMap<>();
			//乐器ID赋值
			bofMap.put("muId", listenQualityTestingDetail.getVocationalWorkId());
			//调用查询物料清单的
			List<ListenBillOfMaterial> bofList=bofDao.bomFindAll(bofMap);		
			//循环查询的物料清单List集合
			for (ListenBillOfMaterial listenBillOfMaterial : bofList) {
				//创建材料库存Map
				Map<String, Object> rsMap=new HashMap<>();
				//材料ID赋值
				rsMap.put("rawstockId", listenBillOfMaterial.getRawstockId());
				//调用查询材料库存的方法
				List<ListenRawstockStock> rtList=rsDao.findRawstockStock(rsMap);
				//循环查询的材料库存List集合
				for (ListenRawstockStock listenRawstockStock : rtList) {
					//创建材料库存类对象
					ListenRawstockStock rs=new ListenRawstockStock();
					//得到生产乐器后材料库存(材料库存-乐器数量*乐器物料清单的材料)
					rs.setRawstockNumber(listenRawstockStock.getRawstockNumber()-(productionNumber*listenBillOfMaterial.getBomNumber()));
					//材料库存ID赋值
					rs.setRsId(listenRawstockStock.getRsId());
					//调用根据材料库存ID修改材料库存的方法
					rsDao.updateByPrimaryKeySelective(rs);
					
					//创建材料库存记录的方法
					ListenRawstockRecord rr=new ListenRawstockRecord();
					//UUID主键
					rr.setRrId(Tools.getRandomString(32));
					//库存ID赋值
					rr.setRsId(listenRawstockStock.getRsId());
					//材料名称赋值
					rr.setRrName(listenRawstockStock.getRawstockName());
					//材料库存记录时间赋值
					rr.setRrTime(new Date());
					//出库数量(乐器数量*乐器物料清单的材料)
					rr.setRrNumber("-"+productionNumber*listenBillOfMaterial.getBomNumber());
					//材料库存记录说明
					rr.setRrExplain("制造"+listenBillOfMaterial.getMuName()+"乐器需要的材料");
					//是否有效(有效)
					rr.setIsva(1);
					
					//调用增加材料库存的方法
					rows=rrDao.insertSelective(rr);
				}
			}
					
			 
		}
		
		
		 
		 
			//创建质检类对象
			ListenQualityTesting qt=new ListenQualityTesting();
			//质检ID赋值
			qt.setQtId(qtId);
			//质检状态赋值(已入库3)
			qt.setQtStatus(3);
			
			//调用根据质检ID修过质检的方法
			rows=qtDao.updateByPrimaryKeySelective(qt);
		 return rows;
	}
	
	/**
     * 
     * @title 根据公司ID查询乐器库存 
     * @param Map
     * @return List
     * @author 江宇
     * @dateTime 2019年1月8日
     * @versions 1.0
     */
	@Override
	public List<ListenStock> findByCompanyId(Map<String, Object> map) {
		 
		return dao.findByCompanyId(map);
	}
	
	 
    /**
     * 
     * @title 根据公司ID查询乐器库存行数
     * @param Map
     * @return List
     * @author 江宇
     * @dateTime 2019年1月8日
     * @versions 1.0
     */
	@Override
	public int findByCompanyIdCount(Map<String, Object> map) {
		 
		return dao.findByCompanyIdCount(map);
	}
	 
	

}
